User interfaces are an important aspect of software. A well designed and implemented user interface can allow users to utilize a particular software product easily. A poorly designed and implemented user interface prevents users from being able fully utilize the functionality of a particular software product. Additionally, poorly designed user interfaces can frustrate users and cause them to switch to a competing software product. Therefore, a significant amount of time and money is spent in developing user interfaces for software products.
Traditionally, software or software products were built monolithically. Groups of developers working together joined their code together to make a single product. The general features and characteristics of the user interface were determined in the early stages.
Newer software development is performed by developing software from various components. This provides a more efficient software development environment and improves software reuse. Each component of a software product can be built independently by a separate team of programmers. Each component can be developed without waiting for other components to be completed and can be shipped at a different time.
However, the benefits of component-based development have not been realized in developing user interfaces. The user interface for a product still needs to be determined at an early stage of development and can not be greatly modified by the separate teams of programmers. Software developers must either fix the user interface of component-based products at the time the product is shipped or provide very limited, inflexible ways for components to change the user interface, which require loading the component into memory. Furthermore, even a minor change in the user interface desired by a component results in redeveloping the user interface. This can be a considerable problem when a product has already been released to manufacture.
Traditionally, a suite of applications may contain a number of applications such as a word processor, a database and a spreadsheet. However, the user interface for such a suite is required to be designed at an early stage and does not easily compensate for varying numbers of components. Additionally, all applications and components of the applications are required to be known when the user interface is being designed. Furthermore, all components are loaded into memory even if those components are not being used by a user. Additionally, the interfaces can not be modified easily once the product has been built.
Therefore, there is a need in the art for a modularized component approach to generating unified user interfaces.